﻿using System.Collections.Generic;
using System.Linq;
using Entities;
using Entities.Modelo;

namespace DataAccessLayer
{
    public class RepositorioComputador : ObjectEntity, ICadastro<Computador>
    {
        public RepositorioComputador()
            : base()
        {

        }

        public void InserirCadastro(Computador objeto)
        {
            tbComputador tbComputador = ComporObjetoComputadorEntity(objeto);
            dataContext.AddTotbComputador(tbComputador);
            dataContext.SaveChanges();
        }

        public void AlterarCadastro(Computador objeto)
        {
            tbComputador tbComputadorEditado = ComporObjetoComputadorEntity(objeto);
            tbComputador tbComputadorAtual = dataContext.tbComputador.Where(x => x.ID == objeto.ID).FirstOrDefault();
            dataContext.ApplyCurrentValues(tbComputadorAtual.EntityKey.EntitySetName, tbComputadorEditado);
            dataContext.SaveChanges();
        }

        public void ExcluirCadastro(Computador objeto)
        {
            tbComputador tbComputadorEditado = ComporObjetoComputadorEntity(objeto);
            tbComputadorEditado.Ativo = false;
            tbComputador tbComputadorAtual = dataContext.tbComputador.Where(x => x.ID == objeto.ID).FirstOrDefault();
            dataContext.ApplyCurrentValues(tbComputadorAtual.EntityKey.EntitySetName, tbComputadorEditado);
            dataContext.SaveChanges();
        }

        public Computador RetornarCadastro(int chave)
        {
            return (from c in dataContext.tbComputador
                    select new Computador
                    {
                        ID = c.ID,
                        Ativo = c.Ativo,
                        DataCompra = c.DataCompra,
                        DataFimGarantia = c.DataFimGarantia,
                        HD = c.HD,
                        ID_Fornecedor = c.ID_Fornecedor,
                        ID_Empresa = c.ID_Empresa,
                        Memoria = c.Memoria,
                        NumeroIdentificador = c.NumeroIdentificador,
                        Preco = c.Preco,
                        Processador = c.Processador,
                        ID_Local = c.ID_Local,
                        Observacao = c.Observacao

                    }).Where(pc => pc.Ativo == true).FirstOrDefault();
        }

        public IList<Computador> RetornarDados()
        {
            return (from c in dataContext.tbComputador
                    select new Computador
                    {
                        ID = c.ID,
                        Ativo = c.Ativo,
                        DataCompra = c.DataCompra,
                        DataFimGarantia = c.DataFimGarantia,
                        HD = c.HD,
                        ID_Fornecedor = c.ID_Fornecedor,
                        ID_Empresa = c.ID_Empresa,
                        Memoria = c.Memoria,
                        NumeroIdentificador = c.NumeroIdentificador,
                        Preco = c.Preco,
                        Processador = c.Processador,
                        ID_Local = c.ID_Local,
                        Observacao = c.Observacao
                    }).Where(pc => pc.Ativo == true).ToList();

        }

        private tbComputador ComporObjetoComputadorEntity(Computador objeto)
        {
            tbComputador tbComputadorEditado = new tbComputador();
            tbComputadorEditado.ID = objeto.ID;
            tbComputadorEditado.Ativo = objeto.Ativo;
            tbComputadorEditado.DataCompra = objeto.DataCompra;
            tbComputadorEditado.DataFimGarantia = objeto.DataFimGarantia;
            tbComputadorEditado.HD = objeto.HD;
            tbComputadorEditado.ID_Fornecedor = objeto.ID_Fornecedor;
            tbComputadorEditado.ID_Empresa = objeto.ID_Empresa;
            tbComputadorEditado.Memoria = objeto.Memoria;
            tbComputadorEditado.NumeroIdentificador = objeto.NumeroIdentificador;
            tbComputadorEditado.Preco = objeto.Preco;
            tbComputadorEditado.Processador = objeto.Processador;
            tbComputadorEditado.ID_Local = objeto.ID_Local;
            tbComputadorEditado.Observacao = objeto.Observacao;
            return tbComputadorEditado;
        }
    }
}
